package com.buka.util;

import com.buka.config.JDBCConfig;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.concurrent.LinkedBlockingQueue;

public class JDBCConnect {

    //阻塞队列
    static LinkedBlockingQueue<Connection> queue = new LinkedBlockingQueue();

    //使用静态代码块初始化队列，初始时创建多少个连接？
    static {
        //根据配置文件中的连接池大小，创建连接。
        for (int i = 0; i < JDBCConfig.getPoolSize(); i++) {
            try {
                Class.forName(JDBCConfig.getDriverName());
                String url = JDBCConfig.getUrl();
                String userName = JDBCConfig.getUserName();
                String passwd = JDBCConfig.getPasswd();
                //建立连接
                Connection connection = DriverManager.getConnection(url, userName, passwd);
                queue.add(connection);
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }

    public static Connection getConnection(){
//        Object take = queue.take();//这是个阻塞方法，如果队列中没有数据了，会阻塞在此处，直到队列中有数据
        Connection take = queue.poll();//poll不会阻塞 如果没有返回个null
        return take;
    }

    //当连接使用完毕，再放回队列
    public static void back(Connection connection){
        queue.add(connection);
    }


}
